package temp.designpattern.builder;

/**
 * 构造者模式
 */
public class Computer {

  private final String cpu;//必须
  private final String ram;//必须
  private final int usbCount;//可选
  private final String keyboard;//可选
  private final String display;//可选

  //私有构造函数，让builder来构建对象
  private Computer(Builder builder) {
    this.cpu = builder.cpu;
    this.ram = builder.ram;
    this.usbCount = builder.usbCount;
    this.keyboard = builder.keyboard;
    this.display = builder.display;
  }

  //利用静态内部类实现builder
  public static class Builder {

    private String cpu;//必须
    private String ram;//必须
    private int usbCount;//可选
    private String keyboard;//可选
    private String display;//可选

    public Builder(String cup, String ram) {
      this.cpu = cup;
      this.ram = ram;
    }

    public Builder setUsbCount(int usbCount) {
      this.usbCount = usbCount;
      return this;
    }

    public Builder setKeyboard(String keyboard) {
      this.keyboard = keyboard;
      return this;
    }

    public Builder setDisplay(String display) {
      this.display = display;
      return this;
    }

    public Computer build() {
      return new Computer(this);
    }
  }
}
